-- ================================================================
-- SQLCheck 数据库初始化脚本
-- 版本: v4.2
-- 创建日期: 2025-08-27
-- 更新日期: 2025-09-04 (v4.2 - 增加AI增强验证字段支持)
-- 描述: 完整的数据库表结构定义，兼容不支持JSON的数据库版本，支持分层分析架构和AI增强验证
-- 注意: 使用TEXT字段替代JSON，所有JSON数据以字符串形式存储
-- 包含: 完整的兼容性规则初始化（52个规则）+ 分层分析支持 + AI增强验证功能
-- ================================================================

-- 设置数据库参数
SET FOREIGN_KEY_CHECKS = 0;
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO';

-- ================================================================
-- 核心表结构定义
-- ================================================================

-- 1. 用户信息表
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `gitlab_id` bigint(20) NOT NULL COMMENT 'GitLab用户ID',
  `git_platform` enum('GITLAB','GITEE','GITHUB') COLLATE utf8mb4_unicode_ci DEFAULT 'GITLAB' COMMENT 'Git平台类型',
  `platform_user_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '平台用户ID',
  `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
  `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱',
  `avatar_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '头像URL',
  `access_token` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'GitLab访问令牌',
  `refresh_token` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'GitLab刷新令牌',
  `token_expires_at` datetime DEFAULT NULL COMMENT '令牌过期时间',
  `is_active` tinyint(1) DEFAULT '1' COMMENT '是否激活',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_gitlab_id` (`gitlab_id`),
  KEY `idx_username` (`username`),
  KEY `idx_email` (`email`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_platform_user` (`git_platform`, `platform_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';

-- 2. 项目信息表
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '项目ID',
  `gitlab_project_id` bigint(20) NOT NULL COMMENT 'GitLab项目ID',
  `git_platform` enum('GITLAB','GITEE','GITHUB') COLLATE utf8mb4_unicode_ci DEFAULT 'GITLAB' COMMENT 'Git平台类型',
  `platform_project_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '平台项目ID',
  `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '项目名称',
  `path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '项目路径',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '项目描述',
  `web_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目Web URL',
  `clone_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项目克隆URL',
  `default_branch` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT 'main' COMMENT '默认分支',
  `visibility` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'private' COMMENT '可见性',
  `owner_id` bigint(20) NOT NULL COMMENT '项目所有者ID',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_gitlab_project_id` (`gitlab_project_id`),
  KEY `idx_owner_id` (`owner_id`),
  KEY `idx_name` (`name`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_platform_project` (`git_platform`, `platform_project_id`),
  CONSTRAINT `projects_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目信息表';

-- 3. 扫描任务表 (支持所有任务类型)
DROP TABLE IF EXISTS `scan_tasks`;
CREATE TABLE `scan_tasks` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID',
  `task_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称',
  `task_type` enum('PROJECT_SCAN','GIT_SCAN','DATABASE_SCAN','MIXED_SCAN','MANUAL_SQL') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务类型',
  `status` enum('PENDING','RUNNING','SUCCESS','FAILED','CANCELLED') COLLATE utf8mb4_unicode_ci DEFAULT 'PENDING' COMMENT '任务状态',
  `progress` int(11) DEFAULT '0' COMMENT '任务进度(0-100)',
  `project_id` bigint(20) DEFAULT NULL COMMENT '关联项目ID',
  `branch_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分支名称',
  `user_id` bigint(20) NOT NULL COMMENT '创建用户ID',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '任务描述',
  `config` text COLLATE utf8mb4_unicode_ci COMMENT '任务配置(扫描范围、规则、分析引擎等)',
  `source_db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER') COLLATE utf8mb4_unicode_ci DEFAULT 'ORACLE' COMMENT '源数据库类型',
  `target_db_type` enum('GOLDENDB','MYSQL','POSTGRESQL') COLLATE utf8mb4_unicode_ci DEFAULT 'GOLDENDB' COMMENT '目标数据库类型',
  `extraction_stats` text COLLATE utf8mb4_unicode_ci COMMENT 'SQL提取统计信息',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `error_message` text COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
  `report_path` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '报告文件路径',
  `retry_count` int(11) DEFAULT '0' COMMENT '当前重试次数',
  `max_retry_count` int(11) DEFAULT '3' COMMENT '最大重试次数',
  `last_retry_time` datetime DEFAULT NULL COMMENT '最后重试时间',
  -- 分层分析支持字段 (v4.1新增)
  `ai_enhancement_enabled` tinyint(1) DEFAULT '0' COMMENT '是否启用AI增强分析',
  `ai_analysis_status` varchar(20) DEFAULT 'NOT_STARTED' COMMENT 'AI分析状态：NOT_STARTED/PENDING/RUNNING/SUCCESS/FAILED/SKIPPED',
  `ai_filter_config` text COLLATE utf8mb4_unicode_ci COMMENT 'AI筛选配置（JSON字符串格式）',
  `rule_analysis_completed_at` timestamp NULL COMMENT '规则分析完成时间',
  `ai_analysis_completed_at` timestamp NULL COMMENT 'AI分析完成时间',
  `problem_sql_count` int(11) DEFAULT '0' COMMENT '规则检出的问题SQL数量',
  `ai_processed_count` int(11) DEFAULT '0' COMMENT 'AI已处理的SQL数量',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  KEY `idx_task_type` (`task_type`),
  KEY `idx_status` (`status`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_project_id` (`project_id`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_source_target_db` (`source_db_type`, `target_db_type`),
  KEY `idx_user_status_created` (`user_id`,`status`,`created_at`),
  KEY `idx_project_type_status` (`project_id`,`task_type`,`status`),
  -- 分层分析相关索引 (v4.1新增)
  KEY `idx_ai_enhancement` (`ai_enhancement_enabled`, `ai_analysis_status`),
  KEY `idx_analysis_times` (`rule_analysis_completed_at`, `ai_analysis_completed_at`),
  CONSTRAINT `scan_tasks_ibfk_1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE SET NULL,
  CONSTRAINT `scan_tasks_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='扫描任务表';

-- 4. SQL语句表 (优化版，作为SQL数据的唯一来源)
DROP TABLE IF EXISTS `sql_statements`;
CREATE TABLE `sql_statements` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `task_id` BIGINT NOT NULL COMMENT '任务ID',
    `statement_number` INT NOT NULL COMMENT '语句编号（任务内全局唯一）',
    `sql_content` MEDIUMTEXT NOT NULL COMMENT 'SQL语句内容',
    `sql_content_hash` VARCHAR(64) COMMENT 'SQL内容哈希值（用于去重）',
    `sql_type` VARCHAR(50) NOT NULL DEFAULT 'QUERY' COMMENT 'SQL类型：QUERY/DML/DDL/PROCEDURE/FUNCTION/TRIGGER',
    `source_type` VARCHAR(50) NOT NULL DEFAULT 'MANUAL_INPUT' COMMENT '来源类型：MYBATIS_XML/MYBATIS_ANNOTATION/JPA_ANNOTATION/DDL_SCRIPT/MANUAL_INPUT',
    `ddl_type` VARCHAR(50) COMMENT 'DDL类型：CREATE_TABLE/CREATE_INDEX/ALTER_TABLE等（仅DDL有效）',
    `source_file` VARCHAR(1000) COMMENT '源文件路径',
    `line_number` INT COMMENT '行号',
    `column_number` INT COMMENT '列号',
    `class_name` VARCHAR(500) COMMENT 'Java类名',
    `method_name` VARCHAR(200) COMMENT '方法名',
    `java_annotation_type` VARCHAR(50) COMMENT 'Java注解类型：SELECT/INSERT/UPDATE/DELETE等',
    `mybatis_xml_element` VARCHAR(50) COMMENT 'MyBatis XML元素类型：select/insert/update/delete等',
    `primary_table` VARCHAR(200) COMMENT '主要操作的表名',
    `affected_tables` TEXT COMMENT '涉及的所有表名（逗号分隔）',
    `database_objects` TEXT COMMENT '涉及的数据库对象（JSON字符串格式）',
    `extraction_metadata` TEXT COMMENT '提取过程的元数据（JSON字符串格式）',
    `is_native_query` BOOLEAN DEFAULT FALSE COMMENT '是否为原生SQL查询',
    `is_derived_query` BOOLEAN DEFAULT FALSE COMMENT '是否为派生查询',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_task_statement` (`task_id`, `statement_number`),
    INDEX `idx_task_id` (`task_id`),
    INDEX `idx_sql_content_hash` (`sql_content_hash`),
    INDEX `idx_sql_type` (`sql_type`),
    INDEX `idx_source_type` (`source_type`),
    INDEX `idx_ddl_type` (`ddl_type`),
    INDEX `idx_primary_table` (`primary_table`(191)),
    INDEX `idx_source_file` (`source_file`(191)),
    INDEX `idx_class_method` (`class_name`(96), `method_name`(95)),
    INDEX `idx_task_type_source` (`task_id`, `sql_type`, `source_type`),
    INDEX `idx_file_line` (`source_file`(190), `line_number`),
    INDEX `idx_created_at` (`created_at`),
    CONSTRAINT `sql_statements_ibfk_1` FOREIGN KEY (`task_id`) REFERENCES `scan_tasks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SQL语句表（优化版 - SQL数据的唯一来源）';

-- 5. 扫描结果表 (优化版，仅存储分析结果)
DROP TABLE IF EXISTS `scan_results`;
CREATE TABLE `scan_results` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `task_id` BIGINT NOT NULL COMMENT '任务ID',
    `statement_id` BIGINT COMMENT 'SQL语句ID，关联sql_statements表',
    `statement_number` INT COMMENT 'SQL语句编号（冗余字段，便于查询）',
    `issue_type` VARCHAR(50) NOT NULL COMMENT '问题类型：SYNTAX_ERROR/COMPATIBILITY_WARNING/PERFORMANCE_ISSUE/SECURITY_RISK',
    `severity` VARCHAR(20) NOT NULL COMMENT '严重程度：HIGH/MEDIUM/LOW/INFO',
    `rule_id` VARCHAR(100) COMMENT '规则ID',
    `rule_name` VARCHAR(200) COMMENT '规则名称',
    `issue_description` TEXT COMMENT '问题描述',
    `suggestion` TEXT COMMENT '修复建议',
    `suggested_sql` TEXT COMMENT '建议的SQL语句',
    `analysis_metadata` TEXT COMMENT '分析元数据（JSON字符串格式，包含Git文件URL等信息）',
    -- 分层分析支持字段 (v4.1新增)
    `analysis_engine` VARCHAR(20) DEFAULT 'RULE' COMMENT '分析引擎：RULE/AI',
    `ai_optimized` tinyint(1) DEFAULT '0' COMMENT '是否经过AI优化',
    `ai_confidence_score` DECIMAL(3,2) COMMENT 'AI分析置信度(0.00-1.00)',
    `optimized_sql` TEXT COMMENT 'AI优化后的SQL语句',
    `optimization_explanation` TEXT COMMENT 'AI优化说明',
    -- AI增强验证字段 (v4.2新增)
    `rule_analysis_confirmed` tinyint(1) DEFAULT NULL COMMENT '规则分析是否被AI确认：1-确认有问题，0-AI认为无问题，NULL-未AI验证',
    `ai_issue_description` TEXT COMMENT 'AI分析的问题描述（可能与规则描述不同）',
    `ai_verification_details` TEXT COMMENT 'AI验证详情（JSON字符串格式，包含AI对规则判断的具体原因）',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    INDEX `idx_task_id` (`task_id`),
    INDEX `idx_statement_id` (`statement_id`),
    INDEX `idx_statement_number` (`statement_number`),
    INDEX `idx_severity` (`severity`),
    INDEX `idx_issue_type` (`issue_type`),
    INDEX `idx_rule_id` (`rule_id`),
    INDEX `idx_task_severity_type` (`task_id`, `severity`, `issue_type`),
    INDEX `idx_task_statement` (`task_id`, `statement_number`, `severity`),
    INDEX `idx_created_at` (`created_at`),
    -- 分层分析相关索引 (v4.1新增)
    INDEX `idx_analysis_engine` (`analysis_engine`, `ai_optimized`),
    INDEX `idx_ai_confidence` (`ai_confidence_score`),
    INDEX `idx_rule_confirmed` (`rule_analysis_confirmed`),
    FOREIGN KEY (`statement_id`) REFERENCES `sql_statements`(`id`) ON DELETE CASCADE,
    CONSTRAINT `scan_results_ibfk_1` FOREIGN KEY (`task_id`) REFERENCES `scan_tasks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='扫描结果表（优化版 - 仅存储分析结果）';

-- 6. 手动SQL分析表
DROP TABLE IF EXISTS `manual_sql_analysis`;
CREATE TABLE `manual_sql_analysis` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `task_id` bigint(20) NOT NULL COMMENT '关联任务ID',
  `sql_content` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'SQL内容',
  `sql_type` enum('QUERY','DML','DDL','PROCEDURE','FUNCTION','TRIGGER') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SQL类型',
  `source_db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER') COLLATE utf8mb4_unicode_ci DEFAULT 'ORACLE' COMMENT '源数据库类型',
  `target_db_type` enum('GOLDENDB','MYSQL') COLLATE utf8mb4_unicode_ci DEFAULT 'GOLDENDB' COMMENT '目标数据库类型',
  `analysis_result` text COLLATE utf8mb4_unicode_ci COMMENT '分析结果',
  `compatibility_level` enum('HIGH','MEDIUM','LOW','INCOMPATIBLE') COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '兼容性级别',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_sql_type` (`sql_type`),
  KEY `idx_compatibility_level` (`compatibility_level`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_source_target_db` (`source_db_type`,`target_db_type`),
  KEY `idx_task_compatibility` (`task_id`,`compatibility_level`),
  CONSTRAINT `manual_sql_analysis_ibfk_1` FOREIGN KEY (`task_id`) REFERENCES `scan_tasks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='手动SQL分析表';

-- 7. 兼容性规则表
DROP TABLE IF EXISTS `compatibility_rules`;
CREATE TABLE `compatibility_rules` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '规则ID',
  `rule_id` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则标识',
  `rule_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则名称',
  `category` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则分类',
  `source_db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '源数据库类型',
  `target_db_type` enum('GOLDENDB','MYSQL','POSTGRESQL') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '目标数据库类型',
  `rule_pattern` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '规则模式(正则表达式)',
  `severity` enum('HIGH','MEDIUM','LOW','INFO') COLLATE utf8mb4_unicode_ci DEFAULT 'MEDIUM' COMMENT '严重程度',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '规则描述',
  `suggestion` text COLLATE utf8mb4_unicode_ci COMMENT '修改建议',
  `example_sql` text COLLATE utf8mb4_unicode_ci COMMENT '示例SQL',
  `suggested_sql` text COLLATE utf8mb4_unicode_ci COMMENT '建议修改后SQL',
  `is_active` tinyint(1) DEFAULT '1' COMMENT '是否启用',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_rule_id` (`rule_id`),
  KEY `idx_category` (`category`),
  KEY `idx_source_db_type` (`source_db_type`),
  KEY `idx_target_db_type` (`target_db_type`),
  KEY `idx_severity` (`severity`),
  KEY `idx_is_active` (`is_active`),
  KEY `idx_source_target` (`source_db_type`, `target_db_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='兼容性规则表';

-- ================================================================
-- AI分析相关表结构 (新增模块)
-- ================================================================

-- 8. AI增强配置表 (v4.1新增 - 分层分析支持)
DROP TABLE IF EXISTS `ai_enhancement_configs`;
CREATE TABLE `ai_enhancement_configs` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `config_name` VARCHAR(100) NOT NULL COMMENT '配置名称',
    `source_db_type` VARCHAR(20) NOT NULL COMMENT '源数据库类型',
    `target_db_type` VARCHAR(20) NOT NULL COMMENT '目标数据库类型',
    
    -- AI筛选配置
    `severity_threshold` VARCHAR(20) DEFAULT 'MEDIUM' COMMENT '触发AI分析的严重程度阈值：HIGH/MEDIUM/LOW/ALL',
    `max_ai_statements` INT DEFAULT 50 COMMENT 'AI分析的最大SQL数量',
    `ai_timeout_seconds` INT DEFAULT 60 COMMENT 'AI分析超时时间(秒)',
    
    -- 性能配置
    `enable_parallel_processing` BOOLEAN DEFAULT TRUE COMMENT '是否启用并行处理',
    `batch_size` INT DEFAULT 10 COMMENT 'AI分析批处理大小',
    
    -- 状态管理
    `is_default` BOOLEAN DEFAULT FALSE COMMENT '是否为默认配置',
    `is_active` BOOLEAN DEFAULT TRUE COMMENT '是否启用',
    
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    UNIQUE KEY `uk_db_types` (`source_db_type`, `target_db_type`, `config_name`),
    INDEX `idx_default_config` (`source_db_type`, `target_db_type`, `is_default`)
) COMMENT='AI增强分析配置表';

-- 9. 大模型优化记录表
DROP TABLE IF EXISTS `llm_optimization_records`;
CREATE TABLE `llm_optimization_records` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '优化记录ID',
  `task_id` bigint(20) NOT NULL COMMENT '关联手动SQL分析任务ID',
  `original_sql` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '原始SQL内容',
  `optimized_sql` text COLLATE utf8mb4_unicode_ci COMMENT '优化后SQL内容',
  `source_db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '源数据库类型',
  `target_db_type` enum('GOLDENDB','MYSQL','POSTGRESQL') COLLATE utf8mb4_unicode_ci DEFAULT 'GOLDENDB' COMMENT '目标数据库类型',
  
  -- 大模型服务信息
  `llm_provider` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型提供商(openai/claude/custom)',
  `llm_model` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '使用的模型名称',
  `llm_version` varchar(50) COLLATE utf8mb4_unicode_ci COMMENT '模型版本',
  
  -- 请求响应信息
  `prompt_content` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '发送的提示词内容',
  `llm_response` text COLLATE utf8mb4_unicode_ci COMMENT '模型原始响应内容',
  `optimization_summary` text COLLATE utf8mb4_unicode_ci COMMENT '优化摘要说明',
  
  -- 差异和高亮信息 (JSON字符串格式)
  `diff_highlights` text COLLATE utf8mb4_unicode_ci COMMENT '差异高亮信息（JSON字符串格式）',
  `detected_issues` text COLLATE utf8mb4_unicode_ci COMMENT '检测到的问题列表（JSON字符串格式）',
  
  -- 执行状态和性能信息
  `status` enum('SUCCESS','FAILED','TIMEOUT','PARSING_ERROR') COLLATE utf8mb4_unicode_ci DEFAULT 'SUCCESS' COMMENT '处理状态',
  `processing_time` int(11) COMMENT '处理时间(毫秒)',
  `confidence_score` decimal(3,2) COMMENT '优化结果置信度(0.00-1.00)',
  `error_message` text COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
  
  -- 审计信息
  `user_id` bigint(20) COMMENT '请求用户ID',
  `request_ip` varchar(45) COLLATE utf8mb4_unicode_ci COMMENT '请求IP地址',
  `user_agent` text COLLATE utf8mb4_unicode_ci COMMENT '用户代理信息',
  
  -- 时间戳
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  
  PRIMARY KEY (`id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_source_target_db` (`source_db_type`, `target_db_type`),
  KEY `idx_llm_provider_model` (`llm_provider`, `llm_model`),
  KEY `idx_status` (`status`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_processing_time` (`processing_time`),
  KEY `idx_confidence_score` (`confidence_score`),
  
  CONSTRAINT `llm_optimization_records_ibfk_1` FOREIGN KEY (`task_id`) REFERENCES `manual_sql_analysis` (`id`) ON DELETE CASCADE,
  CONSTRAINT `llm_optimization_records_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大模型SQL优化记录表';

-- 9. 提示词模板表
DROP TABLE IF EXISTS `llm_prompt_templates`;
CREATE TABLE `llm_prompt_templates` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '模板ID',
  `template_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板标识键',
  `template_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板名称',
  `category` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT 'optimization' COMMENT '模板分类',
  
  -- 适用范围
  `source_db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER','ANY') COLLATE utf8mb4_unicode_ci DEFAULT 'ANY' COMMENT '适用源数据库类型',
  `target_db_type` enum('GOLDENDB','MYSQL','POSTGRESQL','ANY') COLLATE utf8mb4_unicode_ci DEFAULT 'ANY' COMMENT '适用目标数据库类型',
  `sql_types` text COLLATE utf8mb4_unicode_ci COMMENT '适用SQL类型（JSON字符串格式）',
  
  -- 模板内容
  `template_content` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板内容',
  `variables` text COLLATE utf8mb4_unicode_ci COMMENT '模板变量定义（JSON字符串格式）',
  `example_usage` text COLLATE utf8mb4_unicode_ci COMMENT '使用示例',
  
  -- 模板元信息
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '模板描述',
  `instructions` text COLLATE utf8mb4_unicode_ci COMMENT '使用说明',
  `expected_output_format` text COLLATE utf8mb4_unicode_ci COMMENT '期望输出格式',
  
  -- 版本和状态
  `version` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '1.0' COMMENT '模板版本',
  `is_active` tinyint(1) DEFAULT '1' COMMENT '是否启用',
  `is_system` tinyint(1) DEFAULT '0' COMMENT '是否系统模板',
  `priority` int(11) DEFAULT '0' COMMENT '优先级(数字越大优先级越高)',
  
  -- 使用统计
  `usage_count` int(11) DEFAULT '0' COMMENT '使用次数',
  `success_rate` decimal(5,2) DEFAULT '0.00' COMMENT '成功率百分比',
  `avg_processing_time` int(11) DEFAULT '0' COMMENT '平均处理时间(毫秒)',
  
  -- 时间戳
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `created_by` bigint(20) COMMENT '创建用户ID',
  `updated_by` bigint(20) COMMENT '更新用户ID',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_template_key` (`template_key`),
  KEY `idx_category` (`category`),
  KEY `idx_source_target_db` (`source_db_type`, `target_db_type`),
  KEY `idx_is_active` (`is_active`),
  KEY `idx_is_system` (`is_system`),
  KEY `idx_priority` (`priority`),
  KEY `idx_usage_count` (`usage_count`),
  KEY `idx_success_rate` (`success_rate`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大模型提示词模板表';

-- 10. 模型使用统计表
DROP TABLE IF EXISTS `llm_usage_statistics`;
CREATE TABLE `llm_usage_statistics` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '统计记录ID',
  `date` date NOT NULL COMMENT '统计日期',
  `hour` tinyint(4) COMMENT '统计小时(0-23,null表示全天)',
  
  -- 模型信息
  `llm_provider` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型提供商',
  `llm_model` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模型名称',
  
  -- 使用统计
  `total_requests` int(11) DEFAULT '0' COMMENT '总请求数',
  `successful_requests` int(11) DEFAULT '0' COMMENT '成功请求数',
  `failed_requests` int(11) DEFAULT '0' COMMENT '失败请求数',
  `timeout_requests` int(11) DEFAULT '0' COMMENT '超时请求数',
  
  -- 性能统计
  `total_processing_time` bigint(20) DEFAULT '0' COMMENT '总处理时间(毫秒)',
  `avg_processing_time` int(11) DEFAULT '0' COMMENT '平均处理时间(毫秒)',
  `max_processing_time` int(11) DEFAULT '0' COMMENT '最大处理时间(毫秒)',
  `min_processing_time` int(11) DEFAULT '0' COMMENT '最小处理时间(毫秒)',
  
  -- 费用统计(如果适用)
  `total_tokens` bigint(20) DEFAULT '0' COMMENT '总token数',
  `estimated_cost` decimal(10,4) DEFAULT '0.0000' COMMENT '预估费用',
  
  -- 质量统计
  `avg_confidence_score` decimal(5,2) DEFAULT '0.00' COMMENT '平均置信度',
  `high_confidence_count` int(11) DEFAULT '0' COMMENT '高置信度结果数(>0.8)',
  `low_confidence_count` int(11) DEFAULT '0' COMMENT '低置信度结果数(<0.5)',
  
  -- 时间戳
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_date_hour_provider_model` (`date`, `hour`, `llm_provider`, `llm_model`),
  KEY `idx_date` (`date`),
  KEY `idx_provider_model` (`llm_provider`, `llm_model`),
  KEY `idx_total_requests` (`total_requests`),
  KEY `idx_avg_processing_time` (`avg_processing_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大模型使用统计表';

-- ================================================================
-- 辅助表结构
-- ================================================================

-- 11. 数据库连接配置表
DROP TABLE IF EXISTS `database_connections`;
CREATE TABLE `database_connections` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '连接ID',
  `connection_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '连接名称',
  `db_type` enum('MYSQL','ORACLE','POSTGRESQL','SQLSERVER','GOLDENDB','DAMENG','KINGBASE') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据库类型',
  `host` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主机地址',
  `port` int(11) NOT NULL COMMENT '端口号',
  `database_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '数据库名',
  `username` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
  `password_encrypted` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加密密码',
  `connection_params` text COLLATE utf8mb4_unicode_ci COMMENT '连接参数',
  `user_id` bigint(20) NOT NULL COMMENT '所属用户ID',
  `is_default` tinyint(1) DEFAULT '0' COMMENT '是否默认连接',
  `last_test_time` datetime DEFAULT NULL COMMENT '最后测试时间',
  `test_result` tinyint(1) DEFAULT NULL COMMENT '测试结果',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_db_type` (`db_type`),
  KEY `idx_connection_name` (`connection_name`),
  KEY `idx_is_default` (`is_default`),
  CONSTRAINT `database_connections_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='数据库连接配置表';

-- 12. 报告表
DROP TABLE IF EXISTS `reports`;
CREATE TABLE `reports` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '报告ID',
  `task_id` bigint(20) NOT NULL COMMENT '关联任务ID',
  `report_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '报告名称',
  `report_type` enum('PDF','EXCEL','HTML','JSON','CSV','WORD') COLLATE utf8mb4_unicode_ci DEFAULT 'PDF' COMMENT '报告类型',
  `file_path` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径',
  `file_size` bigint(20) DEFAULT NULL COMMENT '文件大小(字节)',
  `generate_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '生成时间',
  `download_count` int(11) DEFAULT '0' COMMENT '下载次数',
  `summary` text COLLATE utf8mb4_unicode_ci COMMENT '报告摘要信息',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标记',
  PRIMARY KEY (`id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_report_type` (`report_type`),
  KEY `idx_generate_time` (`generate_time`),
  CONSTRAINT `reports_ibfk_1` FOREIGN KEY (`task_id`) REFERENCES `scan_tasks` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报告表';

-- 13. 系统配置表
DROP TABLE IF EXISTS `system_configs`;
CREATE TABLE `system_configs` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '配置ID',
  `config_key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置键',
  `config_value` text COLLATE utf8mb4_unicode_ci COMMENT '配置值',
  `config_type` enum('STRING','NUMBER','BOOLEAN','JSON') COLLATE utf8mb4_unicode_ci DEFAULT 'STRING' COMMENT '配置类型',
  `description` text COLLATE utf8mb4_unicode_ci COMMENT '配置描述',
  `is_system` tinyint(1) DEFAULT '0' COMMENT '是否系统配置',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_config_key` (`config_key`),
  KEY `idx_is_system` (`is_system`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';

-- 14. 操作日志表
DROP TABLE IF EXISTS `operation_logs`;
CREATE TABLE `operation_logs` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  `user_id` bigint(20) DEFAULT NULL COMMENT '操作用户ID',
  `operation_type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作类型',
  `operation_desc` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '操作描述',
  `resource_type` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '资源类型',
  `resource_id` bigint(20) DEFAULT NULL COMMENT '资源ID',
  `request_ip` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '请求IP',
  `user_agent` text COLLATE utf8mb4_unicode_ci COMMENT '用户代理',
  `request_params` text COLLATE utf8mb4_unicode_ci COMMENT '请求参数',
  `response_data` text COLLATE utf8mb4_unicode_ci COMMENT '响应数据',
  `execute_time` int(11) DEFAULT NULL COMMENT '执行时间(毫秒)',
  `is_success` tinyint(1) DEFAULT '1' COMMENT '是否成功',
  `error_message` text COLLATE utf8mb4_unicode_ci COMMENT '错误信息',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_operation_type` (`operation_type`),
  KEY `idx_resource_type` (`resource_type`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_is_success` (`is_success`),
  CONSTRAINT `operation_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';

-- 15. 分析引擎统计表
DROP TABLE IF EXISTS `analysis_engine_stats`;
CREATE TABLE `analysis_engine_stats` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '统计ID',
  `date` date NOT NULL COMMENT '统计日期',
  `engine_type` enum('RULE_BASED','LLM_BASED') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '引擎类型',
  `task_count` int(11) DEFAULT 0 COMMENT '任务数量',
  `success_count` int(11) DEFAULT 0 COMMENT '成功任务数',
  `failed_count` int(11) DEFAULT 0 COMMENT '失败任务数',
  `avg_execution_time` decimal(10,2) DEFAULT NULL COMMENT '平均执行时间(秒)',
  `total_issues_found` int(11) DEFAULT 0 COMMENT '发现问题总数',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_date_engine` (`date`, `engine_type`),
  KEY `idx_date` (`date`),
  KEY `idx_engine_type` (`engine_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分析引擎使用统计表';

-- ================================================================
-- 恢复数据库参数
-- ================================================================

SET FOREIGN_KEY_CHECKS = 1;

-- ================================================================
-- 插入系统配置数据
-- ================================================================

INSERT INTO `system_configs` (`config_key`, `config_value`, `config_type`, `description`, `is_system`) VALUES 
('analysis.default_engine', 'RULE_BASED', 'STRING', '默认分析引擎', 1),
('analysis.llm_enabled', 'true', 'BOOLEAN', '是否启用LLM分析引擎', 1),
('analysis.rule_engine_enabled', 'true', 'BOOLEAN', '是否启用规则分析引擎', 1),
('analysis.engine_switch_allowed', 'true', 'BOOLEAN', '是否允许用户选择分析引擎', 1),
('analysis.llm_api_endpoint', '', 'STRING', 'LLM API服务端点', 1),
('analysis.llm_api_key', '', 'STRING', 'LLM API密钥', 1),
('analysis.llm_timeout_seconds', '30', 'NUMBER', 'LLM API超时时间(秒)', 1),
('llm.default_provider', 'openai', 'STRING', '默认大模型提供商', 1),
('llm.default_model', 'gpt-4-turbo-preview', 'STRING', '默认大模型', 1),
('llm.rate_limit_enabled', 'true', 'BOOLEAN', '是否启用频率限制', 1),
('llm.rate_limit_per_minute', '10', 'NUMBER', '每分钟请求限制', 1),
('llm.rate_limit_per_day', '100', 'NUMBER', '每天请求限制', 1),
('ai.verification.enabled', 'true', 'BOOLEAN', '是否启用AI规则验证功能', 1),
('ai.verification.batch_size', '15', 'NUMBER', 'AI验证批处理大小', 1),
('ai.verification.max_retries', '2', 'NUMBER', 'AI验证最大重试次数', 1),
('ai.verification.confidence_threshold', '0.5', 'NUMBER', 'AI验证置信度阈值', 1);

-- ================================================================
-- 初始化默认AI增强配置数据 (v4.1新增)
-- ================================================================

INSERT INTO `ai_enhancement_configs` 
(config_name, source_db_type, target_db_type, severity_threshold, max_ai_statements, is_default) VALUES
('默认配置', 'ORACLE', 'GOLDENDB', 'MEDIUM', 50, TRUE),
('默认配置', 'MYSQL', 'GOLDENDB', 'MEDIUM', 50, TRUE),
('高性能配置', 'ORACLE', 'GOLDENDB', 'HIGH', 30, FALSE),
('全面分析配置', 'ORACLE', 'GOLDENDB', 'LOW', 100, FALSE);

-- ================================================================
-- 初始化默认提示词模板
-- ================================================================

INSERT INTO `llm_prompt_templates` (
    `template_key`, `template_name`, `source_db_type`, `target_db_type`, 
    `template_content`, `variables`, `description`, `is_system`, `priority`
) VALUES 
('oracle_to_goldendb_optimization', 'Oracle到GoldenDB SQL优化模板', 'ORACLE', 'GOLDENDB', 
'你是一个数据库迁移专家，专门负责将Oracle SQL语句优化为兼容GoldenDB的SQL语句。

请分析以下SQL语句并进行优化：

**源数据库类型**: {{source_database}}
**目标数据库类型**: {{target_database}}
**分析时间**: {{current_date}}

**原始SQL**:
```sql
{{original_sql}}
```

**需要检查的兼容性规则**:
{{compatibility_rules}}

**要求**:
1. 识别所有可能的兼容性问题
2. 提供优化后的SQL语句
3. 对每个修改点提供详细说明
4. 确保优化后的SQL在GoldenDB中能正常运行
5. 保持原始SQL的业务逻辑不变

**重点关注以下Oracle特有语法**:
- DECODE函数 → 转换为CASE WHEN语句
- NVL2函数 → 转换为CASE WHEN语句
- FROM DUAL → 根据情况移除或替换
- 序列的NEXTVAL语法 → 转换为标准语法
- CHAR数据类型长度限制 → 检查是否超过GoldenDB限制
- DATE/TIMESTAMP精度问题 → 调整精度

**请以以下JSON格式返回结果**:
```json
{
  "optimized_sql": "优化后的完整SQL语句",
  "summary": "优化摘要说明，包括主要修改点和原因",
  "issues": [
    {
      "type": "FUNCTION_UNSUPPORTED",
      "severity": "HIGH",
      "description": "问题描述",
      "suggestion": "修改建议",
      "line_number": 5,
      "original_text": "原始文本",
      "optimized_text": "优化后文本"
    }
  ],
  "confidence": 0.95
}
```', 
'{"source_database": "源数据库类型", "target_database": "目标数据库类型", "original_sql": "原始SQL", "compatibility_rules": "兼容性规则", "current_date": "当前日期"}',
'Oracle到GoldenDB的SQL优化提示词模板，专注于Oracle特有语法的转换', 1, 10),

('mysql_to_goldendb_optimization', 'MySQL到GoldenDB SQL优化模板', 'MYSQL', 'GOLDENDB',
'你是一个数据库迁移专家，专门负责将MySQL SQL语句优化为兼容GoldenDB的SQL语句。

请分析以下SQL语句并进行优化：

**源数据库类型**: {{source_database}}
**目标数据库类型**: {{target_database}}
**分析时间**: {{current_date}}

**原始SQL**:
```sql
{{original_sql}}
```

**需要检查的兼容性规则**:
{{compatibility_rules}}

**要求**:
1. 识别MySQL特有语法的兼容性问题
2. 提供优化后的SQL语句
3. 确保在GoldenDB中能正常运行
4. 保持原始业务逻辑

**重点关注以下MySQL特有语法**:
- LIMIT offset, count → 转换为LIMIT count OFFSET offset
- MySQL特有函数 → 转换为标准函数
- 数据类型差异 → 调整为GoldenDB支持的类型
- 索引提示语法 → 移除或转换

**请以JSON格式返回结果**:
```json
{
  "optimized_sql": "优化后的SQL",
  "summary": "优化摘要",
  "issues": [...],
  "confidence": 0.90
}
```',
'{"source_database": "源数据库类型", "target_database": "目标数据库类型", "original_sql": "原始SQL", "compatibility_rules": "兼容性规则", "current_date": "当前日期"}',
'MySQL到GoldenDB的SQL优化提示词模板', 1, 8),

('default_optimization', '通用SQL优化模板', 'ANY', 'ANY',
'你是一个数据库SQL优化专家，请分析以下SQL语句的兼容性问题。

**源数据库**: {{source_database}}
**目标数据库**: {{target_database}}
**时间**: {{current_date}}

**SQL语句**:
```sql
{{original_sql}}
```

**适用规则**:
{{compatibility_rules}}

请分析SQL的兼容性问题并提供优化建议。

**返回JSON格式**:
```json
{
  "optimized_sql": "优化后SQL",
  "summary": "优化说明",
  "issues": [],
  "confidence": 0.80
}
```',
'{"source_database": "源数据库", "target_database": "目标数据库", "original_sql": "SQL语句", "compatibility_rules": "规则", "current_date": "日期"}',
'通用SQL优化模板，适用于所有数据库类型', 1, 1);

-- ================================================================
-- 验证表结构创建成功
-- ================================================================

-- 验证核心表创建成功
SELECT 
    TABLE_NAME as table_name,
    TABLE_COMMENT as table_comment,
    TABLE_ROWS as estimated_rows
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
  AND TABLE_NAME IN (
    'users', 'projects', 'scan_tasks', 'sql_statements', 'scan_results',
    'manual_sql_analysis', 'compatibility_rules', 'llm_optimization_records',
    'llm_prompt_templates', 'llm_usage_statistics', 'database_connections',
    'reports', 'system_configs', 'operation_logs', 'analysis_engine_stats'
  )
ORDER BY TABLE_NAME;

-- 验证索引创建成功
SELECT 
    TABLE_NAME,
    INDEX_NAME,
    NON_UNIQUE,
    GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as columns
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE TABLE_SCHEMA = DATABASE() 
  AND TABLE_NAME IN ('sql_statements', 'scan_results', 'llm_optimization_records')
GROUP BY TABLE_NAME, INDEX_NAME
ORDER BY TABLE_NAME, INDEX_NAME;

-- 验证外键约束创建成功
SELECT 
    CONSTRAINT_NAME,
    TABLE_NAME,
    COLUMN_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE TABLE_SCHEMA = DATABASE() 
  AND REFERENCED_TABLE_NAME IS NOT NULL
ORDER BY TABLE_NAME, CONSTRAINT_NAME;

SELECT 
    'SQLCheck数据库初始化完成 - v4.2' as status,
    NOW() as initialization_time,
    'v4.2' as version,
    '已创建完整的数据库表结构，包含AI分析功能、AI增强验证功能和完整兼容性规则集合，兼容不支持JSON的数据库版本' as description;

-- ================================================================
-- 完整兼容性规则初始化（v4.2）
-- ================================================================

-- 清空现有所有规则（完全重建）
DELETE FROM compatibility_rules;

-- 重置AUTO_INCREMENT
ALTER TABLE compatibility_rules AUTO_INCREMENT = 1;

-- Oracle到GoldenDB兼容性规则集合（48个规则）
INSERT INTO compatibility_rules (rule_id, rule_name, category, source_db_type, target_db_type, rule_pattern, severity, description, suggestion, example_sql, suggested_sql, is_active) VALUES
-- 数据类型兼容性规则（16个）
('OR_CHAR_001', 'Oracle CHAR长度限制', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 'CHAR\\s*\\(\\s*([2-9][0-9]{2,}|[1-9][0-9]{3,})\\s*\\)', 'HIGH', 
 'Oracle CHAR最大长度为2000，GoldenDB CHAR最大长度为255。当CHAR长度超过255时会出现兼容性问题。', 
 '建议采用VARCHAR替换超过255长度的CHAR字段。', 
 'CREATE TABLE users (name CHAR(500), code CHAR(1000));', 
 'CREATE TABLE users (name VARCHAR(500), code VARCHAR(1000));', 
 TRUE),

('OR_CHAR_002', 'Oracle NVARCHAR2类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bNVARCHAR2\\b', 'HIGH', 
 'GoldenDB不支持NVARCHAR2类型', 
 '建议采用VARCHAR替换', 
 'CREATE TABLE products (name NVARCHAR2(100), description NVARCHAR2(500));', 
 'CREATE TABLE products (name VARCHAR(100), description VARCHAR(500));', 
 TRUE),

('OR_NUM_001', 'Oracle NUMBER类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bNUMBER\\b(?!\\s*\\()', 'HIGH', 
 'GoldenDB不支持NUMBER类型（不带精度）', 
 '建议采用DECIMAL替换，指定合适的精度和标度', 
 'CREATE TABLE accounts (balance NUMBER, rate NUMBER);', 
 'CREATE TABLE accounts (balance DECIMAL(10,2), rate DECIMAL(5,2));', 
 TRUE),

('OR_NUM_002', 'Oracle BINARY_FLOAT类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bBINARY_FLOAT\\b', 'HIGH', 
 'GoldenDB不支持BINARY_FLOAT类型', 
 '建议采用FLOAT替换', 
 'CREATE TABLE measurements (temperature BINARY_FLOAT, pressure BINARY_FLOAT);', 
 'CREATE TABLE measurements (temperature FLOAT, pressure FLOAT);', 
 TRUE),

('OR_NUM_003', 'Oracle BINARY_DOUBLE类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bBINARY_DOUBLE\\b', 'HIGH', 
 'GoldenDB不支持BINARY_DOUBLE类型', 
 '建议采用DOUBLE或DECIMAL替换', 
 'CREATE TABLE scientific_data (value BINARY_DOUBLE, coefficient BINARY_DOUBLE);', 
 'CREATE TABLE scientific_data (value DOUBLE, coefficient DOUBLE);', 
 TRUE),

('OR_DATE_001', 'Oracle DATE精度问题', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bDATE\\b', 'MEDIUM', 
 'Oracle的DATE精度精确到秒，而GoldenDB的DATE精度精确到天', 
 '建议采用DATETIME替换以保持精度', 
 'CREATE TABLE events (created_date DATE, modified_date DATE);', 
 'CREATE TABLE events (created_date DATETIME, modified_date DATETIME);', 
 TRUE),

('OR_DATE_002', 'Oracle TIMESTAMP精度限制', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 'TIMESTAMP\\s*\\(\\s*([789])\\s*\\)', 'LOW', 
 'Oracle TIMESTAMP支持最大9位小数秒，GoldenDB最大支持6位', 
 '调整TIMESTAMP精度不超过6位', 
 'CREATE TABLE logs (event_time TIMESTAMP(9), process_time TIMESTAMP(8));', 
 'CREATE TABLE logs (event_time TIMESTAMP(6), process_time TIMESTAMP(6));', 
 TRUE),

('OR_DATE_003', 'Oracle TIMESTAMP WITH TIME ZONE', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bTIMESTAMP\\s+WITH\\s+TIME\\s+ZONE\\b', 'HIGH', 
 'GoldenDB不支持指定时区的TIMESTAMP', 
 '使用TIMESTAMP类型并在应用层处理时区', 
 'CREATE TABLE global_events (event_time TIMESTAMP WITH TIME ZONE, created_at TIMESTAMP WITH TIME ZONE);', 
 'CREATE TABLE global_events (event_time TIMESTAMP, created_at TIMESTAMP);', 
 TRUE),

('OR_DATE_004', 'Oracle TIMESTAMP WITH LOCAL TIME ZONE', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bTIMESTAMP\\s+WITH\\s+LOCAL\\s+TIME\\s+ZONE\\b', 'HIGH', 
 'GoldenDB不支持本地时区的TIMESTAMP', 
 '使用TIMESTAMP类型并在应用层处理时区转换', 
 'CREATE TABLE user_activities (login_time TIMESTAMP WITH LOCAL TIME ZONE, logout_time TIMESTAMP WITH LOCAL TIME ZONE);', 
 'CREATE TABLE user_activities (login_time TIMESTAMP, logout_time TIMESTAMP);', 
 TRUE),

('OR_INTERVAL_001', 'Oracle INTERVAL DAY TO SECOND', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bINTERVAL\\s+DAY\\s+TO\\s+SECOND\\b', 'HIGH', 
 'GoldenDB不支持INTERVAL DAY TO SECOND类型', 
 '使用数值类型或字符串存储时间间隔', 
 'CREATE TABLE tasks (duration INTERVAL DAY TO SECOND, timeout INTERVAL DAY TO SECOND);', 
 'CREATE TABLE tasks (duration_seconds INT, timeout_seconds INT);', 
 TRUE),

('OR_INTERVAL_002', 'Oracle INTERVAL YEAR TO MONTH', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bINTERVAL\\s+YEAR\\s+TO\\s+MONTH\\b', 'HIGH', 
 'GoldenDB不支持INTERVAL YEAR TO MONTH类型', 
 '使用数值类型或字符串存储时间间隔', 
 'CREATE TABLE contracts (duration INTERVAL YEAR TO MONTH, extension INTERVAL YEAR TO MONTH);', 
 'CREATE TABLE contracts (duration_months INT, extension_months INT);', 
 TRUE),

('OR_LOB_001', 'Oracle BLOB容量限制', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bBLOB\\b', 'MEDIUM', 
 'Oracle BLOB最多存储(4 gigabytes-1) * (database block size)的二进制数据；GoldenDB BLOB最多2^16-1个字节即64K', 
 '根据需要选择TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB进行替代', 
 'CREATE TABLE documents (content BLOB, attachment BLOB);', 
 'CREATE TABLE documents (content MEDIUMBLOB, attachment LONGBLOB);', 
 TRUE),

('OR_LOB_002', 'Oracle CLOB容量限制', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bCLOB\\b', 'MEDIUM', 
 'Oracle CLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的字符；GoldenDB CLOB最多存储65K', 
 '按需采用TINYTEXT（256 bytes）、TEXT（65,535 bytes ~64kb）、MEDIUMTEXT（16,777,215 bytes ~16MB）、LONGTEXT（4,294,967,295 bytes ~4GB）替换', 
 'CREATE TABLE articles (content CLOB, summary CLOB);', 
 'CREATE TABLE articles (content LONGTEXT, summary TEXT);', 
 TRUE),

('OR_LOB_003', 'Oracle RAW类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bRAW\\b', 'MEDIUM', 
 'goldendb的blob类型最大支持65K，能够兼容raw类型的2k', 
 '建议采用BLOB替换', 
 'CREATE TABLE binary_data (data RAW(2000), checksum RAW(16));', 
 'CREATE TABLE binary_data (data BLOB, checksum BLOB);', 
 TRUE),

('OR_LOB_004', 'Oracle BFILE类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bBFILE\\b', 'HIGH', 
 'GoldenDB不支持BFILE类型', 
 '使用文件路径字符串或外部存储', 
 'CREATE TABLE file_references (document BFILE, image BFILE);', 
 'CREATE TABLE file_references (document_path VARCHAR(500), image_path VARCHAR(500));', 
 TRUE),

('OR_SPECIAL_001', 'Oracle UROWID/ROWID类型', 'DATATYPE', 'ORACLE', 'GOLDENDB', 
 '\\bU?ROWID\\b', 'HIGH', 
 'GoldenDB不支持UROWID和ROWID类型', 
 '删除ROWID字段或使用其他唯一标识符', 
 'CREATE TABLE with_rowid (id NUMBER, row_id UROWID, data VARCHAR2(100));', 
 'CREATE TABLE with_rowid (id DECIMAL(10,0) PRIMARY KEY, data VARCHAR(100));', 
 TRUE),

-- 函数兼容性规则（9个）
('OR_FUNC_001', 'Oracle NVL2函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bNVL2\\s*\\(', 'MEDIUM', 
 'GoldenDB不支持NVL2函数', 
 '使用CASE WHEN表达式替换', 
 'SELECT NVL2(commission, salary + commission, salary) as total_pay FROM employees;', 
 'SELECT CASE WHEN commission IS NOT NULL THEN salary + commission ELSE salary END as total_pay FROM employees;', 
 TRUE),

('OR_FUNC_002', 'Oracle XMLAGG函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bXMLAGG\\s*\\(', 'HIGH', 
 'GoldenDB不支持XMLAGG函数', 
 '使用GROUP_CONCAT或应用层处理', 
 'SELECT XMLAGG(XMLELEMENT(NAME "employee", employee_name)) FROM employees;', 
 'SELECT GROUP_CONCAT(CONCAT(''<employee>'', employee_name, ''</employee>'')) FROM employees;', 
 TRUE),

('OR_FUNC_003', 'Oracle ROWS/RANGE窗口函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\b(ROWS|RANGE)\\s+(BETWEEN|UNBOUNDED|PRECEDING|FOLLOWING|CURRENT)', 'HIGH', 
 'GoldenDB不支持ROWS/RANGE窗口函数语法', 
 '使用其他聚合函数或子查询实现', 
 'SELECT employee_id, salary, SUM(salary) OVER (ORDER BY salary ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) as range_sum FROM employees;', 
 'SELECT employee_id, salary, (SELECT SUM(e2.salary) FROM employees e2 WHERE e2.salary BETWEEN e1.salary-1000 AND e1.salary+1000) as range_sum FROM employees e1;', 
 TRUE),

('OR_FUNC_010', 'Oracle CURRENT_TIMESTAMP不带括号', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bCURRENT_TIMESTAMP\\b(?!\\s*\\()', 'MEDIUM', 
 'Oracle的CURRENT_TIMESTAMP不需要括号，GoldenDB需要括号', 
 '添加括号：CURRENT_TIMESTAMP()', 
 'SELECT employee_id, CURRENT_TIMESTAMP as created_time FROM employees;', 
 'SELECT employee_id, CURRENT_TIMESTAMP() as created_time FROM employees;', 
 TRUE),

('OR_FUNC_011', 'Oracle SYSDATE函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bSYSDATE\\b', 'MEDIUM', 
 'GoldenDB不支持SYSDATE函数', 
 '使用NOW()函数替代', 
 'SELECT employee_id, SYSDATE as created_time FROM employees;', 
 'SELECT employee_id, NOW() as created_time FROM employees;', 
 TRUE),

('OR_FUNC_012', 'Oracle CURRENT_DATE不带括号', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bCURRENT_DATE\\b(?!\\s*\\()', 'MEDIUM', 
 'Oracle的CURRENT_DATE不需要括号，GoldenDB需要括号', 
 '添加括号：CURRENT_DATE()', 
 'SELECT employee_id, CURRENT_DATE as today FROM employees;', 
 'SELECT employee_id, CURRENT_DATE() as today FROM employees;', 
 TRUE),

('OR_FUNC_013', 'Oracle TO_NUMBER函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bTO_NUMBER\\s*\\(', 'MEDIUM', 
 'Oracle TO_NUMBER函数在GoldenDB中需要使用不同语法', 
 '使用CAST或CONVERT函数替代', 
 'SELECT TO_NUMBER(''12345'') as num_value FROM dual;', 
 'SELECT CAST(''12345'' AS DECIMAL) as num_value;', 
 TRUE),

('OR_FUNC_014', 'Oracle TO_CHAR函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bTO_CHAR\\s*\\(', 'MEDIUM', 
 'Oracle TO_CHAR函数在GoldenDB中需要使用不同语法', 
 '使用CAST、CONVERT或DATE_FORMAT函数替代', 
 'SELECT TO_CHAR(hire_date, ''YYYY-MM-DD'') as formatted_date FROM employees;', 
 'SELECT DATE_FORMAT(hire_date, ''%Y-%m-%d'') as formatted_date FROM employees;', 
 TRUE),

('OR_FUNC_015', 'Oracle TO_DATE函数', 'FUNCTION', 'ORACLE', 'GOLDENDB', 
 '\\bTO_DATE\\s*\\(', 'MEDIUM', 
 'Oracle TO_DATE函数在GoldenDB中需要使用不同语法', 
 '使用STR_TO_DATE函数替代', 
 'SELECT TO_DATE(''2023-01-15'', ''YYYY-MM-DD'') as parsed_date FROM dual;', 
 'SELECT STR_TO_DATE(''2023-01-15'', ''%Y-%m-%d'') as parsed_date;', 
 TRUE),

-- 语法兼容性规则（19个）
('OR_SYNTAX_001', 'Oracle BEGIN/END块', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bBEGIN\\s[\\s\\S]*?\\bEND\\s*;', 'HIGH', 
 'GoldenDB不支持PL/SQL的BEGIN/END块', 
 '去除begin和end关键字，将逻辑移至应用层', 
 'BEGIN UPDATE employees SET salary = salary * 1.1; INSERT INTO audit_log VALUES (SYSDATE, ''Salary updated''); END;', 
 'UPDATE employees SET salary = salary * 1.1; INSERT INTO audit_log VALUES (NOW(), ''Salary updated'');', 
 TRUE),

('OR_SYNTAX_002', 'Oracle DELETE语句省略FROM', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bDELETE\\s+(?!FROM)([a-zA-Z_][a-zA-Z0-9_]*)', 'MEDIUM', 
 'Oracle的DELETE语句可以省略FROM关键字，GoldenDB不支持', 
 '添加FROM关键字：delete from xxx', 
 'DELETE employees WHERE department_id = 10;', 
 'DELETE FROM employees WHERE department_id = 10;', 
 TRUE),

('OR_SYNTAX_003', 'Oracle注释格式', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '--(?!\\s)', 'LOW', 
 '在GoldenDB中，"--"后必须加空格', 
 '"--"后加空格', 
 'SELECT * FROM employees; --查询所有员工', 
 'SELECT * FROM employees; -- 查询所有员工', 
 TRUE),

('OR_SYNTAX_004', 'Oracle表别名区分大小写问题', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 'FROM\\s+\\w+\\s+[A-Z]+\\s+.*FROM\\s+\\w+\\s+[a-z]+', 'LOW', 
 'GoldenDB针对表别名不区分大小写，可能导致别名冲突', 
 '避免表别名冲突，使用不同的别名', 
 'SELECT A.name, a.age FROM employees A, departments a WHERE A.dept_id = a.id;', 
 'SELECT e.name, d.dept_name FROM employees e, departments d WHERE e.dept_id = d.id;', 
 FALSE),

('OR_SYNTAX_005', 'Oracle重复NULL列名', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 'SELECT\\s+.*NULL\\s*,\\s*NULL', 'MEDIUM', 
 'Oracle可行，但GoldenDB会报Duplicate column name ''NULL''', 
 '增加字段别名', 
 'SELECT NULL, NULL, employee_name FROM employees;', 
 'SELECT NULL as col1, NULL as col2, employee_name FROM employees;', 
 TRUE),

('OR_SYNTAX_006', 'Oracle双引号列名', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '"[A-Za-z_][A-Za-z0-9_]*"', 'MEDIUM', 
 'GoldenDB列名不支持加双引号', 
 '去掉双引号或是改成单引号', 
 'INSERT INTO employees ("ID", "NAME", "DEPT_ID") VALUES (1, ''John'', 10);', 
 'INSERT INTO employees (ID, NAME, DEPT_ID) VALUES (1, ''John'', 10);', 
 FALSE),

('OR_SYNTAX_007', 'Oracle SYSTEM关键字', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bSYSTEM\\b', 'MEDIUM', 
 'system在GoldenDB中是关键字，不可以作为字段名', 
 '修改字段名', 
 'CREATE TABLE config (system VARCHAR2(50), value VARCHAR2(100));', 
 'CREATE TABLE config (sys_name VARCHAR(50), value VARCHAR(100));', 
 TRUE),

('OR_SYNTAX_008', 'Oracle比较操作符空格', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '(>\\s+=|<\\s+=|!\\s+=|<\\s+>)', 'LOW', 
 'GoldenDB不支持比较操作符中间有空格（> =、< =、! =、< >中间有空格）', 
 '去除操作符之间的空格', 
 'SELECT * FROM employees WHERE salary > = 5000 AND age < = 60 AND status ! = ''INACTIVE'' AND priority < > 1;', 
 'SELECT * FROM employees WHERE salary >= 5000 AND age <= 60 AND status != ''INACTIVE'' AND priority <> 1;', 
 TRUE),

('OR_SYNTAX_009', 'Oracle DUAL表别名', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bFROM\\s+DUAL\\s+\\w+', 'MEDIUM', 
 'dual在GoldenDB中不支持有别名', 
 '删除别名', 
 'SELECT SYSDATE FROM dual d;', 
 'SELECT NOW() FROM dual;', 
 TRUE),

('OR_SYNTAX_010', 'Oracle批量插入SEQUENCE问题', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 'INSERT\\s+INTO\\s+\\w+.*SELECT.*\\w+\\.NEXTVAL', 'HIGH', 
 '批量插入/合并时使用SEQUENCE会导致SEQUENCE ID重复问题', 
 '通过编程进行改造', 
 'INSERT INTO target_table (id, name, dept_id) SELECT seq_employee.NEXTVAL, name, dept_id FROM source_table;', 
 'INSERT INTO target_table (name, dept_id) SELECT name, dept_id FROM source_table; -- 使用AUTO_INCREMENT字段', 
 TRUE),

('OR_SYNTAX_011', 'Oracle模糊查询||拼接语法', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bLIKE\\s+[^\\s]+\\s*\\|\\|\\s*[^\\s]+', 'MEDIUM', 
 '在模糊查询时，Oracle支持使用LIKE语句并使用"||"进行拼接操作，而GoldenDB不支持此方式，需要使用CONCAT函数进行拼接。', 
 '使用CONCAT函数替换||拼接操作', 
 'SELECT * FROM employees WHERE name LIKE ''%'' || search_term || ''%'';', 
 'SELECT * FROM employees WHERE name LIKE CONCAT(''%'', search_term, ''%'');', 
 TRUE),

('OR_SYNTAX_012', 'Oracle列名使用关键字冲突', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\b(key|sort)\\s+(?=\\w)', 'MEDIUM', 
 '在GoldenDB建表时，列名应避免与GoldenDB的关键字冲突，例如以"key"或者"sort"作为列名', 
 '修改列名，避免使用数据库保留关键字，建议使用带前缀或后缀的命名方式', 
 'CREATE TABLE products (id NUMBER, key VARCHAR2(50), sort NUMBER, name VARCHAR2(100));', 
 'CREATE TABLE products (id DECIMAL(10,0), product_key VARCHAR(50), sort_order DECIMAL(10,0), name VARCHAR(100));', 
 TRUE),

('OR_SYNTAX_013', 'Oracle字符编码兼容性问题', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 'CREATE\\s+TABLE\\s+.*(?!.*CHARSET\\s*=\\s*utf8mb4)', 'LOW', 
 'GoldenDB建表时建议指定为utf8mb4格式，这是utf-8的扩展编码格式，具有支持特殊字符的优势', 
 '建表时明确指定字符集为utf8mb4，确保特殊字符的正确存储和显示', 
 'CREATE TABLE users (id NUMBER, name NVARCHAR2(100), description CLOB);', 
 'CREATE TABLE users (id DECIMAL(10,0), name VARCHAR(100), description LONGTEXT) CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;', 
 TRUE),

-- 新增层次查询语法规则
('OR_SYNTAX_014', 'Oracle CONNECT BY层次查询', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bCONNECT\\s+BY\\b', 'HIGH', 
 'GoldenDB不支持Oracle的CONNECT BY层次查询语法', 
 '使用WITH RECURSIVE公共表表达式替代', 
 'SELECT employee_id, employee_name, LEVEL FROM employees START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id;', 
 'WITH RECURSIVE employee_hierarchy AS (SELECT employee_id, employee_name, 1 as level FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.employee_id, e.employee_name, eh.level + 1 FROM employees e JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id) SELECT employee_id, employee_name, level FROM employee_hierarchy;', 
 TRUE),

('OR_SYNTAX_015', 'Oracle START WITH语法', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bSTART\\s+WITH\\b', 'HIGH', 
 'GoldenDB不支持Oracle的START WITH层次查询语法', 
 '使用WITH RECURSIVE公共表表达式替代', 
 'SELECT employee_id, employee_name FROM employees START WITH manager_id IS NULL CONNECT BY PRIOR employee_id = manager_id;', 
 'WITH RECURSIVE employee_hierarchy AS (SELECT employee_id, employee_name FROM employees WHERE manager_id IS NULL UNION ALL SELECT e.employee_id, e.employee_name FROM employees e JOIN employee_hierarchy eh ON e.manager_id = eh.employee_id) SELECT employee_id, employee_name FROM employee_hierarchy;', 
 TRUE),

('OR_SYNTAX_016', 'Oracle NULLS LAST排序', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bNULLS\\s+LAST\\b', 'MEDIUM', 
 'GoldenDB不支持NULLS LAST排序语法', 
 '使用IF(ISNULL())函数控制排序', 
 'SELECT * FROM employees ORDER BY salary DESC NULLS LAST;', 
 'SELECT * FROM employees ORDER BY IF(ISNULL(salary),0,1), salary DESC;', 
 TRUE),

('OR_SYNTAX_017', 'Oracle NULLS FIRST排序', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bNULLS\\s+FIRST\\b', 'MEDIUM', 
 'GoldenDB不支持NULLS FIRST排序语法', 
 '使用IF(ISNULL())函数控制排序', 
 'SELECT * FROM employees ORDER BY hire_date ASC NULLS FIRST;', 
 'SELECT * FROM employees ORDER BY IF(ISNULL(hire_date),1,0), hire_date ASC;', 
 TRUE),

('OR_SYNTAX_018', 'Oracle INSERT ALL语法', 'SYNTAX', 'ORACLE', 'GOLDENDB', 
 '\\bINSERT\\s+ALL\\b', 'HIGH', 
 'GoldenDB不支持Oracle的INSERT ALL批量插入语法', 
 '使用标准的INSERT INTO ... VALUES(),(),()语法', 
 'INSERT ALL INTO employees (id, name) VALUES (1, ''John'') INTO employees (id, name) VALUES (2, ''Jane'') SELECT * FROM dual;', 
 'INSERT INTO employees (id, name) VALUES (1, ''John''), (2, ''Jane'');', 
 TRUE),

-- 功能兼容性规则（4个）
('OR_FEATURE_001', 'Oracle存储过程', 'FEATURE', 'ORACLE', 'GOLDENDB', 
 '\\bCREATE\\s+(OR\\s+REPLACE\\s+)?PROCEDURE\\b', 'HIGH', 
 'Oracle存储过程在GoldenDB中不支持', 
 '通过编码实现相应功能', 
 'CREATE OR REPLACE PROCEDURE update_salary(emp_id NUMBER, new_salary NUMBER) AS BEGIN UPDATE employees SET salary = new_salary WHERE id = emp_id; END;', 
 '-- 在应用程序中实现存储过程逻辑', 
 TRUE),

('OR_FEATURE_002', 'Oracle自定义函数', 'FEATURE', 'ORACLE', 'GOLDENDB', 
 '\\bCREATE\\s+(OR\\s+REPLACE\\s+)?FUNCTION\\b', 'HIGH', 
 'Oracle自定义函数在GoldenDB中不支持', 
 '通过编码实现相应功能', 
 'CREATE OR REPLACE FUNCTION calculate_bonus(salary NUMBER) RETURN NUMBER AS BEGIN RETURN salary * 0.1; END;', 
 '-- 在应用程序中实现函数逻辑', 
 TRUE),

('OR_FEATURE_003', 'Oracle触发器', 'FEATURE', 'ORACLE', 'GOLDENDB', 
 '\\bCREATE\\s+(OR\\s+REPLACE\\s+)?TRIGGER\\b', 'HIGH', 
 'Oracle触发器在GoldenDB中不支持', 
 '通过编码实现相应功能', 
 'CREATE OR REPLACE TRIGGER trg_employee_audit AFTER INSERT OR UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO audit_log VALUES (SYSDATE, USER, :NEW.id); END;', 
 '-- 在应用程序中实现触发器逻辑', 
 TRUE),

('OR_FEATURE_004', 'Oracle SEQUENCE', 'FEATURE', 'ORACLE', 'GOLDENDB', 
 '\\bCREATE\\s+SEQUENCE\\b', 'HIGH', 
 'Oracle SEQUENCE在GoldenDB中不支持', 
 '通过分布式序列进行替换', 
 'CREATE SEQUENCE seq_employee START WITH 1 INCREMENT BY 1 MAXVALUE 999999;', 
 '-- 使用AUTO_INCREMENT字段替代 CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100));', 
 TRUE);

-- MySQL到GoldenDB兼容性规则集合（4个规则）
INSERT INTO compatibility_rules (rule_id, rule_name, category, source_db_type, target_db_type, rule_pattern, severity, description, suggestion, example_sql, suggested_sql, is_active) VALUES
('MY_DATE_001', 'MySQL DATE字段CURRENT_TIMESTAMP默认值', 'SYNTAX', 'MYSQL', 'GOLDENDB', 
 '\\bDATE\\s+.*\\bDEFAULT\\s+CURRENT_TIMESTAMP', 'HIGH', 
 'GoldenDB不支持DATE类型字段直接使用 CURRENT_TIMESTAMP() 作为默认值', 
 '字段可改用timestamp类型', 
 'CREATE TABLE events (id INT AUTO_INCREMENT PRIMARY KEY, event_date DATE DEFAULT CURRENT_TIMESTAMP(), description VARCHAR(255));', 
 'CREATE TABLE events (id INT AUTO_INCREMENT PRIMARY KEY, event_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), description VARCHAR(255));', 
 TRUE),

('MY_CONFIG_001', 'MySQL explicit_defaults_for_timestamp配置', 'CONFIG', 'MYSQL', 'GOLDENDB', 
 'explicit_defaults_for_timestamp\\s*=\\s*off', 'MEDIUM', 
 'MySQL默认值off，GoldenDB默认值为on。当设置为off时插入null会自动设置current timestamp值。当设置为on时则不会自动设置，因此会报错', 
 '（1）删除字段的NOT NULL约束 （2）代码适配，确保对该字段的操作值为非NULL', 
 'CREATE TABLE logs (id INT, created_at TIMESTAMP NOT NULL); INSERT INTO logs (id) VALUES (1);', 
 'CREATE TABLE logs (id INT, created_at TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP); INSERT INTO logs (id, created_at) VALUES (1, NOW());', 
 TRUE),

('MY_MERGE_001', 'MySQL MERGE INTO语法风险', 'SYNTAX', 'MYSQL', 'GOLDENDB', 
 '\\bMERGE\\s+INTO\\b', 'HIGH', 
 '在GoldenDB上使用merge into语法时，有一定概率会导致实例宕机', 
 '避免在GoldenDB上使用该语法', 
 'MERGE INTO target_table t USING source_table s ON (t.id = s.id) WHEN MATCHED THEN UPDATE SET t.name = s.name WHEN NOT MATCHED THEN INSERT (id, name) VALUES (s.id, s.name);', 
 'INSERT INTO target_table (id, name) SELECT id, name FROM source_table ON DUPLICATE KEY UPDATE name = VALUES(name);', 
 TRUE),

('MY_WITH_001', 'MySQL WITH语法风险', 'SYNTAX', 'MYSQL', 'GOLDENDB', 
 '\\bWITH\\s+\\w+\\s+AS\\s*\\(', 'HIGH', 
 '在GoldenDB上使用with语法时，有一定概率会导致实例宕机', 
 '避免在GoldenDB上使用该语法', 
 'WITH employee_summary AS (SELECT department_id, COUNT(*) as emp_count FROM employees GROUP BY department_id) SELECT d.name, es.emp_count FROM departments d JOIN employee_summary es ON d.id = es.department_id;', 
 'SELECT d.name, sub.emp_count FROM departments d JOIN (SELECT department_id, COUNT(*) as emp_count FROM employees GROUP BY department_id) sub ON d.id = sub.department_id;', 
 TRUE);

-- 验证规则插入结果
SELECT 
    'Oracle→GoldenDB规则' as rule_type,
    category,
    COUNT(*) as rule_count
FROM compatibility_rules 
WHERE source_db_type = 'ORACLE' AND target_db_type = 'GOLDENDB'
GROUP BY category
UNION ALL
SELECT 
    'MySQL→GoldenDB规则' as rule_type,
    category,
    COUNT(*) as rule_count
FROM compatibility_rules 
WHERE source_db_type = 'MYSQL' AND target_db_type = 'GOLDENDB'
GROUP BY category
ORDER BY rule_type, category;

-- 统计总体规则数量
SELECT 
    source_db_type,
    target_db_type,
    COUNT(*) as total_rules,
    SUM(CASE WHEN severity = 'HIGH' THEN 1 ELSE 0 END) as high_severity,
    SUM(CASE WHEN severity = 'MEDIUM' THEN 1 ELSE 0 END) as medium_severity,
    SUM(CASE WHEN severity = 'LOW' THEN 1 ELSE 0 END) as low_severity,
    SUM(CASE WHEN is_active = 1 THEN 1 ELSE 0 END) as active_rules
FROM compatibility_rules
GROUP BY source_db_type, target_db_type
ORDER BY source_db_type, target_db_type;

-- ================================================================
-- 数据库结构说明
-- ================================================================

/*
SQLCheck v4.2 数据库结构特点：

1. 兼容性优化：
   - 所有JSON字段改为TEXT字段，存储JSON字符串格式
   - 适配不支持JSON数据类型的MySQL/MariaDB版本
   - 保持原有的业务逻辑和数据结构

2. 表结构优化：
   - sql_statements 表：作为SQL语句数据的单一来源，避免重复存储
   - scan_results 表：仅存储分析结果，通过外键关联SQL数据
   - 新增AI分析相关表：llm_optimization_records, llm_prompt_templates, llm_usage_statistics

3. 兼容性规则完整化（v4.2新增特性）：
   - Oracle→GoldenDB：44个完整规则，涵盖数据类型、函数、语法、功能四大类别
   - MySQL→GoldenDB：4个主要兼容性规则
   - 规则分类体系：DATATYPE、FUNCTION、SYNTAX、FEATURE、CONFIG
   - 严重程度分级：HIGH、MEDIUM、LOW、INFO
   - 每个规则包含详细的示例SQL、修复建议和改写示例

4. AI增强验证功能（v4.2新增）：
   - rule_analysis_confirmed: 记录AI对规则分析结果的确认状态
   - ai_issue_description: AI分析的详细问题描述
   - ai_verification_details: AI验证的完整推理过程和详情
   - 支持AI对规则引擎结果的二次验证和优化
   - 实现分层分析架构：规则分析 → AI增强验证

5. 分层分析架构（v4.1+v4.2完整实现）：
   - 两阶段分析：规则引擎分析 + AI增强验证
   - 智能筛选：优先处理有问题的SQL
   - 性能优化：避免不必要的AI调用
   - 配置化：支持启用/禁用AI验证功能

6. 规则覆盖范围：
   Oracle兼容性规则：
   - 数据类型：16个规则（字符类型、数值类型、日期类型、区间类型、大对象类型、特殊类型）
   - 函数兼容性：9个规则（NVL2、XMLAGG、窗口函数、日期时间函数、类型转换函数等）
   - 语法兼容性：19个规则（BEGIN/END、DELETE FROM、注释格式、层次查询、排序语法、批量插入、模糊查询等）
   - 功能兼容性：4个规则（存储过程、函数、触发器、序列）
   
   MySQL兼容性规则：
   - 配置差异：1个规则（explicit_defaults_for_timestamp）
   - 语法风险：3个规则（DATE默认值、MERGE INTO、WITH语法）

7. AI增强验证系统（v4.2新功能）：
   - RuleVerificationService: 专门的AI规则验证服务
   - SqlBatchSplitter: 智能分批处理，基于字符长度优化
   - 置信度评分：0.00-1.00精确度评估
   - 详细推理记录：完整的AI验证过程追踪
   - 批量处理优化：12000字符/批次，支持大量规则结果验证
   - 错误恢复：AI验证失败不影响原有规则分析结果

8. 服务架构优化（v4.2）：
   - 单一职责原则：SqlBatchSplitter专注分批逻辑
   - 分层分析协调：LayeredAnalysisCoordinator统一管理分析流程
   - 优雅降级：AI服务不可用时保持规则分析正常工作
   - 配置驱动：所有AI功能可通过配置启用/禁用
   - 添加复合索引优化常用查询场景
   - 所有文本字段索引使用前缀长度限制，兼容MySQL索引长度限制
   - 外键约束确保数据一致性

6. 功能支持：
   - 完整的用户认证和项目管理
   - 多类型任务支持（GIT_SCAN, DATABASE_SCAN, MANUAL_SQL, MIXED_SCAN）
   - 双重分析引擎（规则引擎 + AI分析）
   - 完善的审计日志和统计功能

7. AI功能集成：
   - 大模型优化记录完整追踪
   - 提示词模板管理系统
   - 模型使用统计和性能监控
   - 支持多种大模型提供商

8. 数据维护：
   - 软删除机制，避免数据丢失
   - 完善的时间戳记录
   - 数据完整性约束
   - 支持数据清理和统计功能

9. MyBatis Plus最佳实践：
   - 使用自动映射的Mapper方法
   - 支持批量操作和条件查询
   - 优化索引提高查询性能
   - 遵循MyBatis Plus代码规范

10. 部署建议：
   - 适用于MySQL 5.7+/MariaDB 10.2+
   - 建议innodb_large_prefix=ON以支持更长的索引
   - 推荐使用utf8mb4字符集确保完整的UTF-8支持
   - 规则数据量：48个兼容性规则，覆盖全面的迁移场景

11. 规则质量保证：
   - 基于实际迁移文档（@docs/Rule/Oracle2GoldenDB.md、@docs/Rule/Mysql2GoldenDB.md）
   - 每个规则包含完整的测试用例和修复示例
   - 正则表达式模式经过验证，确保准确匹配
   - 支持规则的启用/禁用和动态更新
*/